package com.bjpowerrnode.javase.array;

/**
 * 选择排序法：
 * 每一次从这堆参与比较的书记当中找出最小值，
 * 拿出这个最小值与最前的元素交换位置。
 *
 * 选择排序与冒泡排序好在：每一次交换位置都是有意义的。
 *  因此选择排序比冒泡排序的效率高。
 *
 *  原始数据： 3,2,7,9,6,1,8
 *  第一次循环：1,2,7,9,6,3,8 (这些参加比较的数据中最左边的下标是0)
 *
 *  第二次循环参与比较的数据：2,7,9,6,3,8(这些参加比较的数据中最左边的下标是1)
 *  结果：2,7,9,6,3,8
 *
 *  第三次循环参与比较的数据：7,9,6,3,8(这些参加比较的数据中最左边的下标是2)
 *  结果：3,9,6,7,8
 *
 *  第四次循环参与比较的数据：9,6,7,8(这些参加比较的数据中最左边的下标是3)
 *  结果：6,9,7,8
 *
 *  第五次循环：9,7,8(这些参加比较的数据中最左边的下标是4)
 *  结果：7,9,8
 *
 *  第六次循环：9,8(这些参加比较的数据中最左边的下标是5)
 *  结果：8,9
 *
 * 关键点：怎么找出一堆数据中最小的。
 * 假设第一个数最小的，次次往下比较，找出最小的，并记住最小值的位置，
 * 然后和本次参与比较的数据的最左边的数，交换位置。
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] array= {3,2,7,9,6,1,8};
        System.out.print("原始数组：[");
        for (int i = 0; i < array.length; i++) {
            if(i < array.length - 1) {
                System.out.print(array[i] + "," );
            }else System.out.print(array[i]);
        }
        System.out.println("]");

        //选择排序7个数据外层循环6次
        /*
        for (int i = 0; i < array.length-1; i++) {
            //i的值是0,1,2,3,4,5
            //i正好是参与比较的数据中最左边的坐标
            int temp_array = array[i];
            int temp_j = i;
            for (int j = i+1; j < array.length; j++) {
                if (temp_array > array[j]) {
                    temp_array = array[j];
                    temp_j = j;
                }
            }

            if (temp_j!=i){//表示存在更小的数据
                array[temp_j] = array[i];
                array[i] = temp_array;
            }

        }*/

        for(int i = 0;i < array.length-1;i++){
            int min = i;
            for(int j = i+1;j<array.length;j++){
                if(array[j] < array[min]){
                    min = j;
                }
            }
            if(min != i){
                int temp = array[min];
                array[min] = array[i];
                array[i] = temp;
            }
        }
        System.out.print("原始数组：[");
        for (int i = 0; i < array.length; i++) {
            if(i < array.length - 1) {
                System.out.print(array[i] + "," );
            }else System.out.print(array[i]);
        }
        System.out.println("]");
    }
}
